package com.oa.controller;

import com.oa.server.SocketTest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import redis.clients.jedis.Jedis;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @version 1.0
 * @atuthor xie
 * @Description: 测试webSocket
 * @date: 2025-02-28 9:45
 */
@RestController
@CrossOrigin
@RequestMapping("/socket")
public class TestSocket {

    // Redis 服务器的主机地址
    private static final String host = "192.168.109.130";
    // Redis 服务器的端口号
    private static final int port = 6379;
    // 连接 Redis 服务器的密码
    private static final String pwd = "123456";
    // 维护群聊映射，Key 为群聊 ID，Value 为该群聊中的用户 ID 集合
    private static ConcurrentHashMap<String, Set<String>> groupChats = new ConcurrentHashMap<>();



    //向指定客户端发送信息
    @PostMapping("/push/{cid}")
    public Map<String,Object> pushToWeb(@PathVariable String cid, @RequestBody String message) {
        // 创建返回结果的 Map
        Map<String,Object> result = new HashMap<>();
        // 推送消息到指定客户端
        SocketTest.sendMessageToUsers(message, cid,null);
        // 将客户端标识符和消息内容存入结果 Map
        result.put("code", cid);  // 客户端标识符
        result.put("msg", message);  // 推送的消息内容

        // 返回结果 Map，包含推送信息
        return result;
    }

    //发送公告到所有客服端
    @PostMapping("/push")
    public Map<String,Object> pushToWeb2(@RequestBody String message) {
        // 创建返回结果的 Map
        Map<String,Object> result = new HashMap<>();
        // 推送消息到所有连接的客户端
        SocketTest.sendMessageToUsers(message,null,null);
        // 将消息内容存入结果 Map
        result.put("msg", message);  // 推送的消息内容
        // 返回结果 Map，包含推送信息
        return result;
    }


    // 根据用户 ID 获取离线消息
    @PostMapping("/getOfflineMessages")
    public ResponseEntity<List<String>> sendMessageToUsers(@RequestBody Map<String, String> message) {
        // 获取 Redis 中存储离线消息的键
        String key = message.get("sid");
        try (Jedis jedis = new Jedis(host, port)) {
            // 进行 Redis 认证
            jedis.auth(pwd);
            // 从 Redis 获取用户的所有离线消息（列表）
            List<String> userMessage = jedis.lrange("offline_messages:" + key, 0, -1);
            // 获取完消息后，删除 Redis 中该用户的离线消息，避免重复获取
            jedis.del("offline_messages:" + key);
            // 返回消息列表给前端
            return ResponseEntity.ok(userMessage);
        } catch (Exception e) {
            // 如果发生异常，返回 500 错误
            return ResponseEntity.status(500).body(null);
        }
    }


//    @PostMapping("/getOfflineGroupMessages")
//    public ResponseEntity<List<String>> getOfflineGroupMessages(@RequestBody Map<String, String> request) {
//        String sid = request.get("sid"); // 获取用户 ID
//        String groupId = request.get("groupId"); // 获取群聊 ID
//
//        if (sid == null || sid.isEmpty() || groupId == null || groupId.isEmpty()) {
//            return ResponseEntity.badRequest().body(Collections.singletonList("用户 ID 和 群聊 ID 不能为空"));
//        }
//
//        List<String> offlineMessages = new ArrayList<>();
//
//        try (Jedis jedis = new Jedis(host, port)) {
//            jedis.auth(pwd);
//
//            // 检查当前用户是否在该群聊中
//            Set<String> members = groupChats.get(groupId);
//            if (members != null && members.contains(sid)) {
//                List<String> groupMessages = jedis.lrange("offline_group_messages:" + groupId, 0, -1);
//                offlineMessages.addAll(groupMessages);
//
//                // 清除 Redis 记录
//                if (!groupMessages.isEmpty()) {
//                    jedis.del("offline_group_messages:" + groupId);
//                    System.out.println("已推送群聊 " + groupId + " 的未读消息，并清除 Redis 记录");
//                }
//            }
//
//            return ResponseEntity.ok(offlineMessages);
//
//        } catch (Exception e) {
//            return ResponseEntity.status(500).body(Collections.singletonList("服务器错误: " + e.getMessage()));
//        }
//    }



}
